
//
//  HPStatusesViewModel.swift
//  MyWeibo
//
//  Created by Apeng on 16/4/13.
//  Copyright © 2016年 Apengpeng. All rights reserved.
//

import UIKit

class HPStatusesViewModel: NSObject {
    
    //*** 有了 viewModel 后就需要拥有vm 来处理数据和相关逻辑
    lazy var statusCellVM: [HPStatusCellViewModel] = [HPStatusCellViewModel]()
    
    func loadDataWithHomePage(isPullUp: Bool, finished: (isSuccess: Bool) -> ()) {
        // 判断是否授权成功
        guard let token = HPUserAccountViewModel.sharedUserAccountViewModel.userAccount?.access_token else {
            print("用户为登陆或者账号已过期")
            return
        }
        
        
        // 发送网络请求
        //  1, 从微博HPStatuses模型中获取微博的id 对应的数据
        //  2, statusCellVM 是一个模型数组, 取出最后一个模型,在从模型中取出 status 微博
        var max_id: Int64 = 0
        var since_id: Int64 = 0
        
        if !isPullUp {
            since_id = statusCellVM.first?.status?.id ?? 0 // 加载最新, 取出第一个数组中的
        } else {
            max_id = statusCellVM.last?.status?.id ?? 0 // 加载更多
        }
        
        HPNetworkingTools.sharedTools.loadHomePageData(token, max_id: max_id, since_id: since_id) { (result, error) -> () in
            if error != nil {
                print(error)
                // 闭包返回结果
                finished(isSuccess: false)
            }
            print(token)
            
            // 网络请求成功,将字典转模型
            // 尝试将json格式的结果装换Wie字典
            guard let dict = result as? [String:AnyObject] else {
                
                // 闭包返回结果
                finished(isSuccess: false)
                return
            }
            
            // 根据 statuses 的key值获取对应的字典数组, 遍历数组
            // 本身是json格式, 需要转化
            guard let dictArray = dict["statuses"] as? [[String:AnyObject]] else {
                
                // 闭包返回结果
                finished(isSuccess: false)
                return
            }
            
            // 将字典转化为模型
            // 可变数组, 定义数组中元素的类型并且实例化
//********  实例化为  ViewModel 类型
            var tempArray = [HPStatusCellViewModel]()
            for item in dictArray {
                
                let obj = HPStatuses(dict: item)
//******** 初始化 VM 模型中
                let statusCellVM = HPStatusCellViewModel(statuses: obj)
//******** 将转化的模型装入VM 中, 让每一个cell 对应着每一 VM
                tempArray.append(statusCellVM)
            }
            // 保存模型

            if !isPullUp {
                self.statusCellVM = tempArray + self.statusCellVM
            } else {
                self.statusCellVM = self.statusCellVM + tempArray
            }
            // 闭包返回结果
            finished(isSuccess: true)
        }
    }
}
